package com.supermap.business.iot.service;

import com.alibaba.fastjson.JSONObject;

import java.util.List;

/**
 * @author xiaolu
 * @date 2018/8/1 下午2:22
 */
public interface IotConsumerService {
    /**
     * 校验用户信息
     *
     * @param userName 用户名
     * @param password 密码
     * @param isUseMD5 是否未加密
     * @return 结果信息
     */
    JSONObject isValid(String userName, String password, boolean isUseMD5);

    /**
     * 获取基地列表
     *
     * @param userName 用户名
     * @param password 密码
     * @param isUseMD5 是否未加密
     * @return 基地列表
     */
    JSONObject getRegions(String userName, String password, boolean isUseMD5);

    /**
     * 根据基地编号获取基地气象点数据
     *
     * @param regionId 基地编号
     * @param userName 用户名
     * @param password 密码
     * @param isUseMD5 是否未加密
     * @return 基地气象点数据
     */
    JSONObject getWeatherPointsByRegionId(String userName, String password, boolean isUseMD5, int regionId);

    /**
     * 根据基地网关编号获取基地气象点数据
     *
     * @param userName 用户名
     * @param password 密码
     * @param isUseMD5 是否未加密
     * @param BMId     网关编号
     * @return 基地气象点数据
     */
    JSONObject getWeatherPointsByBMId(String userName, String password, boolean isUseMD5, int BMId);

    /**
     * 根据基地编号获取下属节点列表
     *
     * @param userName 用户名
     * @param password 密码
     * @param isUseMD5 是否未加密
     * @param regionId 基地编号
     * @return 节点列表
     */
    JSONObject getNodesByRegionID(String userName, String password, boolean isUseMD5, int regionId);

    /**
     * 根据基地网关编号获取下属节点列表
     *
     * @param userName 用户名
     * @param password 密码
     * @param isUseMD5 是否未加密
     * @param BMId     网关编号
     * @return 节点列表
     */
    JSONObject getNodesByBMID(String userName, String password, boolean isUseMD5, int BMId);

    /**
     * 根据节点编号获取节点监测类型列表
     *
     * @param userName 用户名
     * @param password 密码
     * @param isUseMD5 是否未加密
     * @param nodeId   节点编号
     * @return 监测类型列表
     */
    JSONObject getMonitorCategories(String userName, String password, boolean isUseMD5, int nodeId);

    /**
     * 根据节点编号和日期获取节点统计数据
     *
     * @param userName 用户名
     * @param password 密码
     * @param isUseMD5 是否未加密
     * @param nodeId   节点编号
     * @param time     日期
     * @param type     1：小时平均值；2：小时最小值；3：小时最大值；6：日平均值；7：日最小值；8：日最大值
     * @return 节点统计数据
     */
    JSONObject getEnvInfosByStat(String userName, String password, boolean isUseMD5, int nodeId, String time, int type);

    /**
     * 根据节点编号获取实时数据
     *
     * @param userName 用户名
     * @param password 密码
     * @param isUseMD5 是否未加密
     * @param nodeIdList   节点编号
     * @return 实时数据
     */
    JSONObject getEnvInfoDetails(String userName, String password, boolean isUseMD5, List nodeIdList);

    /**
     * 根据节点编号获取设备列表
     *
     * @param userName 用户名
     * @param password 密码
     * @param isUseMD5 是否未加密
     * @param nodeId   节点编号
     * @return 设备列表
     */
    JSONObject getDevices(String userName, String password, boolean isUseMD5, int nodeId);

    /**
     * 发送设备控制指令
     *
     * @param userName 用户名
     * @param password 密码
     * @param isUseMD5 是否未加密
     * @param deviceId 设备编号
     * @param openType 指令 0 - 关闭，1 - 打开（向上），2 - 打开（向下）
     * @return 指令执行状态
     */
    JSONObject sendDeviceCommand(String userName, String password, boolean isUseMD5, int deviceId, int openType);


    /**
     * 发送设备控制详细指令，包含开关状态、控制时间、控制强度
     *
     * @param userName     用户名
     * @param password     密码
     * @param isUseMD5     是否未加密
     * @param deviceId     设备编号
     * @param openType     指令 0 - 关闭，1 - 打开（向上），2 - 打开（向下）
     * @param ctrTime      控制时间(单位为秒)
     * @param ctrIntensity 控制强度 0-100
     * @return 指令执行状态
     */
    JSONObject sendDeviceCommandDetail(String userName, String password, boolean isUseMD5, int deviceId, int openType, int ctrTime, int ctrIntensity);

    /**
     * 获取基地、大棚/温室、节点对应地图信息
     *
     * @param userName 用户名
     * @param password 密码
     * @param isUseMD5 是否未加密
     * @param regionId 基地编号
     * @param type     地图信息类型：0 - 基地地图信息；1 - 大棚/温室地图信息；2 - 节点地图信息
     * @param code     附加编码：type为0时此值为空，传空字符串即可；type为1时此值为需要获取的大棚/温室名称；type为2时此值为节点编号
     * @return
     */
    JSONObject getMapInfo(String userName, String password, boolean isUseMD5, int regionId, int type, String code);
}
